package main

import "sync"

// lice 和 map 作为返回值
// 当我们的函数返回 slice 或者 map 的时候，也要注意是不是直接返回了内部数据的引用到外部。
func main() {

}

type Stats struct {
	sync.Mutex
	counters map[string]int
}

// Good
func (s *Stats) Snapshot() map[string]int {
	s.Lock()
	defer s.Unlock()
	result := make(map[string]int, len(s.counters))
	for k, v := range s.counters {
		result[k] = v
	}
	return result
}

// Bad
func (s *Stats) Snapshot2() map[string]int {
	s.Lock()
	defer s.Unlock()
	return s.counters
}
